package com.work.demo.file;

import org.apache.commons.lang.StringUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * 使用nio遍历文件夹，并操作文件
 */
public class FolderFiles {

    public static void main(String[] args) throws IOException {


        String path = "workTest/src";
        //遍历某个文件夹下的所有文件
        Path start = Paths.get(path);
//        try(Stream<Path> fileStream = Files.walk(start)) {
//            //过滤文件夹类型的文件，只显示文件
//            fileStream.filter(Files :: isRegularFile).forEach(System.out::println);
//        }

        // 需求：在所有的java文件中寻找某个单词
        Files.walkFileTree(start, new FileVisitor<Path>() {
            /*
            整个过程相当于生命周期的钩子
             */
            //访问文件夹之前
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                return FileVisitResult.CONTINUE;
            }

            //访问文件的时候
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                if (file.toString().endsWith(".java")){
                    String content = StringUtils.join(Files.readAllLines(file, StandardCharsets.UTF_8).toArray());
                    if (content.contains("user")){
                        System.out.println(file);
                    }

                }
                return FileVisitResult.CONTINUE;
            }

            //访问文件失败的时候
            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;
            }

            //访问文件夹之后
            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;
            }
        });

    }

}
